Package de.yaams.extensions.basemap.tiled.mapeditor.actions

Source Code of de.yaams.extensions.basemap.tiled.mapeditor.actions.SaveAsAction

/*
* Tiled Map Editor, (c) 2004-2006
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version.
*
* Adam Turk <aturk@biggeruniverse.com> Bjorn Lindeijer <bjorn@lindeijer.nl>
*/

package de.yaams.extensions.basemap.tiled.mapeditor.actions;

import java.awt.event.ActionEvent;
import java.io.File;

import javax.swing.AbstractAction;
import javax.swing.JFileChooser;
import javax.swing.KeyStroke;

import de.yaams.extensions.basemap.tiled.io.MapHelper;
import de.yaams.extensions.basemap.tiled.mapeditor.MapEditor;
import de.yaams.extensions.basemap.tiled.mapeditor.Resources;
import de.yaams.extensions.basemap.tiled.mapeditor.util.ConfirmingFileChooser;
import de.yaams.extensions.basemap.tiled.mapeditor.util.TiledFileFilter;
import de.yaams.extensions.basemap.tiled.util.TiledConfiguration;
import de.yaams.maker.helper.gui.YEx;

/**
* A save action that always shows a file chooser.
*
* @version $Id$
*/
public class SaveAsAction extends AbstractAction {
  /**
   *
   */
  private static final long serialVersionUID = 3760628207510569687L;
  protected MapEditor editor;
  private boolean savingCancelled;

  private static final String ACTION_NAME = Resources.getString("action.map.saveas.name");
  private static final String ACTION_TOOLTIP = Resources.getString("action.map.saveas.tooltip");
  private static final String SAVEAS_ERROR_MESSAGE = Resources.getString("dialog.saveas.error.message");
  private static final String SAVEAS_ERROR_TITLE = Resources.getString("dialog.saveas.error.title");

  public SaveAsAction(MapEditor editor) {
    super(ACTION_NAME);
    putValue(SHORT_DESCRIPTION, ACTION_TOOLTIP);
    putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control shift S"));
    this.editor = editor;
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    showFileChooser();
  }

  /**
   * Shows the confirming file chooser and proceeds with saving the map when a
   * filename was approved.
   */
  protected void showFileChooser() {
    // Start at the location of the most recently loaded map file
    String startLocation = TiledConfiguration.node("recent").get("file0", null);

    TiledFileFilter byExtensionFilter = new TiledFileFilter(TiledFileFilter.FILTER_EXT);

    JFileChooser chooser = new ConfirmingFileChooser(startLocation);
    chooser.setAcceptAllFileFilterUsed(false);
    chooser.addChoosableFileFilter(byExtensionFilter);

    MapHelper.addExtension(chooser);

    chooser.setFileFilter(byExtensionFilter);

    int result = chooser.showSaveDialog(editor.getAppFrame());
    if (result == JFileChooser.APPROVE_OPTION) {
      savingCancelled = false;
      TiledFileFilter saver = (TiledFileFilter) chooser.getFileFilter();
      saveFile(saver, chooser.getSelectedFile());
    } else {
      savingCancelled = true;
    }
  }

  /**
   * Actually saves the map.
   *
   * @param saver
   *            the file filter selected when the filename was chosen
   * @param filename
   *            the filename to save the map to
   */
  protected void saveFile(TiledFileFilter saver, File filename) {
    try {
      // Either select the format by extension or use a specific format
      // when selected.
      MapHelper.saveMap(editor.getCurrentMap(), filename);

      // The file was saved successfully, update some things.
      // todo: this could probably be done a bit neater
      editor.getCurrentMap().setFilename(filename);
      editor.updateRecent(filename.getAbsolutePath());
      editor.getUndoHandler().commitSave();
    } catch (Throwable t) {
      YEx.info(SAVEAS_ERROR_MESSAGE + " " + filename + ": " + t.getLocalizedMessage(), t);
    }
  }

  public boolean isSavingCancelled() {
    return savingCancelled;
  }
}
TOP

Related Classes of de.yaams.extensions.basemap.tiled.mapeditor.actions.SaveAsAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.